package cn.edu.gduf.luowowo.article.service;

import cn.edu.gduf.luowowo.article.domain.Destination;
import cn.edu.gduf.luowowo.article.query.DestinationDaysQuery;
import cn.edu.gduf.luowowo.article.query.DestinationQuery;
import cn.edu.gduf.luowowo.article.query.DestinationSearchQuery;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * 目的地服务
 */
public interface IDestinationService {
    /**
     * 通过层次查询目的地
     * @param deep 深度
     * @return 返回目的地集合
     */
    List<Destination> getDestsByDeep(int deep);


    /**
     * 添加或更新
     * @param destination 目的地对象
     */
    void saveOrUpdate(Destination destination);

    /**
     * 关联的目的地集合
     * @param rid 目的地id
     * @return 返回目的地集合
     */
    List<Destination> getDestByRegionId(Long rid);

    /**
     * 分页查询
     * @param qo 查询条件
     * @return 查询结果
     */
    PageInfo query(DestinationQuery qo);

    /**
     * 查询导航吐司
     * @param parentId 父id
     * @return 返回目的地集合
     */
    List<Destination> getToasts(Long parentId);

    /**
     * 通过目的地获取该目的地的国家
     * @param id 目的地id
     * @return 返回国家
     */
    Destination getCountry(Long id);

    /**
     * 获取省份
     * @param id 目的地id
     * @return 返回省份
     */
    Destination getProvince(Long id);

    /**
     * 查询所有
     * @return 所有目的地集合
     */
    List<Destination> list();

    /**
     * 设置/取消热门
     * @param id id
     * @param hot 是否热门
     */
    void changeHotValue(Long id, int hot);

    /**
     * 根据区域id查询热门目的地
     * @param regionId
     * @return
     */
    List<Destination> getHotDestByRegionId(Long regionId);

    /**
     * 根据大攻略的id查询对应的目的地
     * @param strategyId 大攻略id
     * @return 目的地对象
     */
    Destination queryByStrategyId(Long strategyId);

    /**
     * hotel服务的搜索框下，查询部分城市
     * @return 返回目的地列表
     */
    List<Destination> queryDestsForChinaCity();

    /**
     * 根据酒店主题id查询对应的目的地
     * @param themeId 主题id
     * @return 返回目的地集合
     */
    List<Destination> queryByHotelThemeId(Long themeId);

    /**
     * 将酒店按照价格排序，拿去重后的排序前六的酒店关联的城市
     * @return 目的地(城市)集合
     */
    List<Destination> queryForHotelCity();

    /**
     * 查询热门的飞机目的地
     * @return
     */
    List<Destination> queryHotFlights();

    /**
     * 查询目的地拼音是从A到E的
     * @return
     */
    List<Destination> queryFlightsByA2E();

    /**
     * 查询目的地拼音是从F到J的
     * @return
     */
    List<Destination> queryFlightsByF2J();

    /**
     * 查询目的地拼音是从K到P的
     * @return
     */
    List<Destination> queryFlightsByK2P();

    /**
     * 查询目的地拼音是从Q到W的
     * @return
     */
    List<Destination> queryFlightsByQ2W();

    /**
     * 查询目的地拼音是从X到Z的
     * @return
     */
    List<Destination> queryFlightsByX2Z();

    /**
     * 获取单个目的地
     * @param id
     * @return
     */
    Destination get(Long id);


    List<Destination> queryDestByMonId(Long monthId);

    /**
     * 目的地筛选
     * @param qo
     * @return
     */
    List<Destination> queryDest(DestinationSearchQuery qo);

    /**
     * 获取目的地天数
     * @param qo
     * @return
     */
    List<Destination> queryDestDay(DestinationDaysQuery qo);
}
